/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package agb.Controlador;

import java.util.ArrayList;
import java.util.List;
import org.me.codigo.Baldor;


/**
 *
 * @author Lizardo Rios Villavicencio
 */
public class UsuarioWeb implements java.io.Serializable {

    private int codUsuarioWeb;
    private int codPersona;
    private int codTipoUsuarioWeb;
    private String alias;
    private String clave;
    private boolean activo;
    private String recordatorio;
    private String preguntaSecreta;
    private String respuestaSecreta;
    ///////////////////////////////////
    private boolean valido;
    private String tipoUsuario;
    private String nombrePersona;
    
    //////////////////////////////////
    /* Variables de miembro */
    private String nombreCompleto;
    //private String alias;
    private String nombreTipo;
    //private boolean activo;
    
    private int contador;
    private boolean opcionFiltrado;
    private String apellidoPaterno;
    private String apellidoMaterno;
    
    /* ArrayLists que contienen grupos de registros */
    private List codigoPersonaList, nombreCompletoList, cuentaList, activoList;
    
    /* Variables de ayuda */
    private int currentRow;
    private int tmpCurrentRow;
    private int rowCount;
    private boolean vPublicar;
    
    //private Connection db = null;
    private ArrayList listaUsuarioWeb = new ArrayList();
    private ArrayList listaCuentas = new ArrayList();
    private ArrayList cuenta = new ArrayList();
    ////////////////////////////////////////////////////

    //Constructor
    public UsuarioWeb() {
        /* Inicializar propiedades del bean */
        setNombreCompleto("");
        setAlias("");
        setNombreTipo("");
        setActivo(false);
        
        setPublicar(false);
        
        /* Inicializar arrayList para contener grupos de registros */
        codigoPersonaList = new ArrayList();
        nombreCompletoList = new ArrayList();
        cuentaList = new ArrayList();
        activoList = new ArrayList();
                        
        /* Inicializar variables de ayuda */
        currentRow = 0;
        rowCount = 0;
    }
    public UsuarioWeb(boolean opc) {
        
    }
    
    /* Metodos Accesor */
    public int getCodUsuarioWeb() {
        return this.codUsuarioWeb;
    }
    public void setCodUsuarioWeb(int codUsuarioWeb) {
        this.codUsuarioWeb = codUsuarioWeb;
    }

    public int getCodPersona() {
        return this.codPersona;
    }
    public void setCodPersona(int codPersona) {
        this.codPersona = codPersona;
    }

    public int getCodTipoUsuarioWeb() {
        return this.codTipoUsuarioWeb;
    }
    public void setCodTipoUsuarioWeb(int codTipoUsuarioWeb) {
        this.codTipoUsuarioWeb = codTipoUsuarioWeb;
    }

    public String getAlias() {
        return this.alias;
    }
    public void setAlias(String alias) {
        this.alias = alias;
    }
    
    public ArrayList getCuenta() {
        return this.cuenta;
    }
    public void setCuenta(ArrayList _cuenta){
        this.cuenta = _cuenta;
    }

    public String getClave() {
        return this.clave;
    }
    public void setClave(String clave) {
        this.clave = clave;
    }

    public boolean getActivo() {
        return this.activo;
    }
    public void setActivo(boolean activo) {
        this.activo = activo;
    }

    public String getRecordatorio() {
        return this.recordatorio;
    }
    public void setRecordatorio(String recordatorio) {
        this.recordatorio = recordatorio;
    }

    public String getPreguntaSecreta() {
        return this.preguntaSecreta;
    }
    public void setPreguntaSecreta(String preguntaSecreta) {
        this.preguntaSecreta = preguntaSecreta;
    }

    public String getRespuestaSecreta() {
        return this.respuestaSecreta;
    }
    public void setRespuestaSecreta(String respuestaSecreta) {
        this.respuestaSecreta = respuestaSecreta;
    }

    public boolean getValido() {
        return this.valido;
    }
    public void setValido(boolean valido) {
        this.valido = valido;
    }
    
    public String getTipoUsuario() {
        return this.tipoUsuario;
    }
    public void setTipoUsuario(String tipoUsuario) {
        this.tipoUsuario = tipoUsuario;
    }
    
    public String getNombrePersona() {
        return this.nombrePersona;
    }
    public void setNombrePersona(String nombrePersona) {
        this.nombrePersona = nombrePersona;
    }
    /******************************************************/
    
    public String getNombreCompleto() {
        return this.nombreCompleto;
    }
    public void setNombreCompleto(String nombreCompleto) {
        this.nombreCompleto = nombreCompleto;
    }
    
    public String getNombreTipo() {
        return this.nombreTipo;
    }
    public void setNombreTipo(String nombreTipo) {
        this.nombreTipo = nombreTipo;
    }
    
    ////////////// PARA EL FILTRADO //////////////////
    public void setOpcionFiltrado(boolean _opcionFiltrado) {
        opcionFiltrado = _opcionFiltrado;
    }
    public boolean getOpcionFiltrado() {
        return opcionFiltrado;
    }
    
    public void setApellidoPaterno(String _apellidoPaterno) {
        apellidoPaterno = _apellidoPaterno;
    }
    public String getApellidoPaterno() {
        return apellidoPaterno;
    }
    
    public void setApellidoMaterno(String _apellidoMaterno) {
        apellidoMaterno = _apellidoMaterno;
    }
    public String getApellidoMaterno() {
        return apellidoMaterno;
    }
    ////////////// PARA LA PAGINACION //////////////////
    
    /* Cargar personas */ 
    private void cargarUsuariosWeb(){
        UsuarioLOG lUsuarioWeb = new UsuarioLOG();
        if (opcionFiltrado) {
            listaUsuarioWeb = lUsuarioWeb.filtrarXapellidos(apellidoPaterno, apellidoMaterno);
        } else {
            listaUsuarioWeb = lUsuarioWeb.listarUsuarioWeb();
        }
    }
    
    private void cargarCuentas(){
        UsuarioLOG lUsuarioWeb = new UsuarioLOG();
        listaCuentas = lUsuarioWeb.listarCuentasUsuarioWebs(this);
    }
        
    //////////////////////////////////////////
    
    public int cantidadCuentas() {
        int resultado = (listaCuentas.isEmpty()) ? 0 : listaCuentas.size();
        return resultado;
    }
    
    /* Atributo de solo lectura */
    public int getCurrentRow() {
        return currentRow;
    }
    
    /* Estado de la publicacion */
    public void setPublicar(boolean _vPublicar) {
        vPublicar = _vPublicar;
    }
    public boolean getPublicar() {
        return vPublicar;
    }
    
    /* Publicar lista de registros */
    public boolean populate() {
        if (vPublicar) {
            nombreCompletoList.clear();
            vPublicar = false;
        }
        
        /* Si prodIDList esta vacio, entonces ejecutar la consulta para 
         * publicarla o Si la opcion de filtro esta activada
         */
        if (nombreCompletoList.isEmpty() || opcionFiltrado) {
            try {
                /* Execute Query */
                cargarUsuariosWeb();
                codigoPersonaList.clear();
                nombreCompletoList.clear();
                cuentaList.clear();
                activoList.clear();
                                
                rowCount = 0;
                // Rellenar todas los registros en los arrayList de la paginacion
                for (int fils=1; fils<listaUsuarioWeb.size(); ++fils) {
                    String[] unaFila = (String[]) listaUsuarioWeb.get(fils); 
                    codigoPersonaList.add(unaFila[0]);
                    nombreCompletoList.add(unaFila[1]);
                    //activoList.add(unaFila[2]);
                    
                    int xCodPersona = (unaFila[0] == null) ? 0 : Baldor.aEntero(unaFila[0]);
                    setCodPersona(xCodPersona);
                    
                    cargarCuentas();
                    cuentaList.add(listaCuentas);
//                    for (int j=1; j<listaCuentas.size(); ++j) {
//                        String[] unaJ = (String[]) listaCuentas.get(j);
//                        cuentaList.add(unaJ[1]);
//                    }  
                    rowCount++;
                }
            } catch (Exception e) {
                System.out.println("Error populating productBean" + e.toString());
                return false;
            }
        }
        /* Devuelve el estado de la operacion (se asume que fue positivo llegados a este punto) */
            return true;
    }
    
    /* Aumentar la fila correlativa */
    public void setContador(int _contador) {
        contador = _contador;
    }
    
    /* Recuperar el contador */
    public int getContador() {
        contador++;
        return contador;
    }
    
    /* Recuperar fila actual */
    public int getFilaActual() {
        return tmpCurrentRow;
    }
    
    /* Restablecer la fila actual */
    public void setStartRow(int _start) {
        if (_start < rowCount) {
            currentRow = _start;
        }
    }
    
    /* Ir a la siguiente fila */
    public int nextRow() {
        
        if (currentRow == rowCount) {
            currentRow = 0; // Reset for next page request
            tmpCurrentRow = currentRow;
            return 0;  // return 0 to indicate end of recordset
        }
        
        /* Publicar las propiedades del bean con la fila actual */
        if (codigoPersonaList.size()<currentRow) {
            // cambiar esta clausula para el uso de los filtros
            currentRow = 0;
        }
        String sCodPersona = (String)codigoPersonaList.get(currentRow);
        int xCodPersona = (sCodPersona == null) ? 0 : Baldor.aEntero(sCodPersona);
        setCodPersona(xCodPersona);
        setNombreCompleto((String) nombreCompletoList.get(currentRow));
        setCuenta((ArrayList)cuentaList.get(currentRow));
        //String sActivo = (String)activoList.get(currentRow);
        //sActivo = (sActivo.compareTo("t")==0) ? "true" : (sActivo.compareTo("f")==0) ? "false" : "";
        //setActivo(Baldor.aBooleano(sActivo));
        currentRow++;
        tmpCurrentRow = currentRow;
        
        /* Devolver currentRow */
        return currentRow;
    }
    
    
}
